from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import random
base_url = "https://baike.baidu.com"
# his_start = ["/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/5162711"]
# # print(his_start[-1])
# # 1、在屏幕上打印出来我们现在正在哪张网页上, 网页的名字叫什么.
# url = base_url + his_start[-1]
# html = urlopen(url).read().decode('utf-8')
# soup = BeautifulSoup(html,features='lxml')
# # print(html)
# print(soup.find('h1').get_text(),'  url:',his_start[-1])
# """
# 接下来我们开始在这个网页上找所有符合要求的 /item/ 网址. 使用一个正则表达式(正则教程) 过滤掉不想要的网址形式.
# 这样我们找到的网址都是 /item/%xx%xx%xx... 这样的格式了. 之后我们在这些过滤后的网页中随机选一个, 当做下一个要爬的网页.
#  不过有时候很不幸, 在 sub_urls 中并不能找到合适的网页, 我们就往回跳一个网页, 回到之前的网页中再随机抽一个网页做同样的事.
# """
# sub_urls = soup.find_all('a',{'target':'_blank','href':re.compile("/item/(%.{2})+$")})
# if len(sub_urls)!=0:
#     his_start.append(random.sample(sub_urls,1)[0]['href'])
# else:
#     his_start.pop()
# print(his_start)
his = ["/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/5162711"]
for i in range(20):
    url = base_url + his[-1]

    html = urlopen(url).read().decode('utf-8')
    soup = BeautifulSoup(html, features='lxml')
    print(i, soup.find('h1').get_text(), '    url: ', his[-1])

    # find valid urls
    sub_urls = soup.find_all("a", {"target": "_blank", "href": re.compile("/item/(%.{2})+$")})
    # for link in sub_urls:
    #     print(link['href'])

    if len(sub_urls) != 0:
        # print(len(sub_urls))
        his.append(random.sample(sub_urls, 1)[0]['href'])
    else:
        # no valid sub link found
        his.pop()